package licode.unisop.oidc.authsa.stp;

import cn.dev33.satoken.session.TokenSign;
import licode.unisop.oidc.auth.modal.AuthorContext;
import lombok.Getter;
import lombok.Setter;

/**
 * 扩展Sa-Token的令牌签名信息
 *
 * @author licode
 */
@Getter
public class SaTokenSign extends TokenSign {
    /**
     * 单点登录的会话令牌
     */
    private String ssoToken;

    /**
     * 登录刷新令牌
     */
    private String refreshToken;

    /**
     * 登录状态（0：正常；1：等待续期）
     */
    private Integer state;

    /**
     * 登录第一次创建时间（单位：秒）
     */
    private Long createTime;

    /**
     * 登录更新时间（单位：秒）
     */
    private Long updateTime;

    /**
     * 登录超时时间（单位：秒）
     */
    private Long accessExpire;

    /**
     * 登录超时时间（单位：秒）
     */
    private Long refreshExpire;

    public SaTokenSign(String value, String device, Object tag) {
        super(value, device, tag);
        state = 0;
        updateCreateTime();
    }

    public void setSsoToken(String ssoToken) {
        this.ssoToken = ssoToken;
    }

    public void setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public void updateCreateTime() {
        if (this.createTime == null) {
            this.createTime = System.currentTimeMillis() / 1000;
        }
    }

    public void updateUpdateTime() {
        this.updateTime = System.currentTimeMillis() / 1000;
    }

    public void updateExpiredTime(long accessExpire, long refreshExpire) {
        this.updateTime = System.currentTimeMillis() / 1000;
        this.refreshExpire = this.updateTime + refreshExpire;
        this.accessExpire = this.updateTime + accessExpire;
        updateCreateTime();
    }
}
